package esdomaci.mediator;

import java.awt.Point;
import java.util.ArrayList;

import esdomaci.gamemap.Stanje;

/**
 * Interfejs sa samo onim metodama klase MatricaIgre koji
 * su dostupni vestackoj inteligenciji. 
 * @see esdomaci.gamemap.MatricaIgre
 * @author Milan
 */
public interface IMapaVidljivoAI {
	
	/**
	 * Vracanje osecaja mirisa
	 * @param igrac Pozicija igraca
	 * @return True ukoliko se igrac nalazi pored odaje sa kanibalom 
	 */
	public boolean osecamMirisKanibala(Point igrac) ;
	
	/**
	 * Vracanje osecaja promaje
	 * @param igrac Pozicija igraca
	 * @return True ukoliko se igrac nalazi pored odaje sa rupom
	 */
	public boolean osecamPromaju(Point igrac) ;
	
	/**
	 * Da li se vidi sjaj zlata?
	 * @param igrac Pozicija igraca
	 * @return True ukoliko se igrac nalazi pored odaje sa zlatom
	 */
	public boolean osecamSjaj(Point igrac) ;
	
	/**
	 * Vracanje opisa kraja igre ukoliko je doslo do njega
	 * @param igrac Pozicija igraca na osnovu koje se proracunava da li
	 * je doslo do kraja igre
	 * @return Vraca null ukoliko se igrac i dalje moze kretati, inace
	 * vraca opis kraja igre.
	 */
	public String krajIgre(Point igrac) ;
	
	/**
	 * Vracanje objekta tipa Stanje koje opisuje odredjenu odaju na
	 * osnovu opazaja koji su skupljeni kako u okolnim odajama tako
	 * i (mogucim) prolaskom kroz tu odaju
	 * @param odaja Lokacija odaje koja nas interesuje
	 * @return Stanje koje se opisuje objektom tipa Stanje
	 */
	public Stanje vrati(Point odaja) ;
	
	/**
	 * Samo XY wrapper za IMapaVidljivoAI.vrati(Point)
	 */
	public Stanje vrati(int x, int y) ;
	
	public ArrayList<Point> vratiOkolneOdaje(Point odaja);
	public ArrayList<Point> vratiSveOdajeKojeMoguDaSumnjajuNaOvuOdaju(Point odaja);
	public ArrayList<Point> vratiBezbednePoseceneOdaje();
	public ArrayList<Point> vratiOdajeSaSumnjom(int stanje, boolean fiksirano);
	
	public ArrayList<Point> vratiPoseceneOdaje();
	public ArrayList<Point> vratiSumnjiveOdaje();
	public ArrayList<Point> vratiBezbedneNePoseceneOdaje();
	public ArrayList<Point> vratiFiksneOpasneOdaje();
	
	
}